
const base = './'
import { resolve } from 'path'
import { loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import VitePluginElementPlus from 'vite-plugin-element-plus'

import { viteMockServe } from "vite-plugin-mock"
import vueJsx from "@vitejs/plugin-vue-jsx"
import styleImport from "vite-plugin-style-import"
import { svgBuilder } from './src/plugins/svgBuilder'

function pathResolve(dir) {
  return resolve(process.cwd(), '.', dir)
}

export default ({ command, mode }) => {
  const root = process.cwd()
  const env = loadEnv(mode, root)
  const port = env.port || 8080
  let prodMock = true
  return {
    root,
    base,
    resolve: {
      alias: {
        '/@': pathResolve('src'),
      }
    },
    server: {
      host: '0.0.0.0',
      port,
      strictPort: false,
      https: false,
      open: true,
      proxy: {
        '/api': {
          target: env.VITE_APP_BASE_URL,
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '')
        }
      },
    },
    build: {
      target: 'es2015',
      sourcemap: false,
      brotliSize: false,
      chunkSizeWarningLimit: 2000,
      rollupOptions: {
        external: [
          'BMap',
          'ElMessage',
          'ElMessageBox',
          // resolve( './src/some-local-file-that-should-not-be-bundled.js' )
        ]
      }
    },

    define: {
      // __VERSION__: pkg.version,
      __INTLIFY_PROD_DEVTOOLS__: false,
    },

    css: {
      postcss: {
        plugins: [
          require('autoprefixer')
        ]
      },
      preprocessorOptions: {
        scss: {
          // 引入 var.scss 这样就可以在全局中使用 var.scss中预定义的变量了
          // 给导入的路径最后加上 ;
          // additionalData: '@import "./src/styles/variables.scss";'
          additionalData: `@use "./src/styles/variables.scss" as *;`,
        }
      }
    },

    optimizeDeps: {
      // 在预构建中强制排除的依赖项
      exclude: [],
      // 默认情况下，不在 node_modules 中的，链接的包不会被预构建。使用此选项可强制预构建链接的包。
      include: [
        "element-plus/lib/locale/lang/zh-cn",
        "element-plus/lib/locale/lang/en",
        "vxe-table/lib/locale/lang/zh-CN",
        "vxe-table/lib/locale/lang/en-US",
      ],
    },


    plugins: [
      vue(),
      vueJsx({
        optimize: false,
        mergeProps: true,
      }),
      svgBuilder('./src/icons/svg/'), // 全量导入svg
      // styleImport({
      //   libs: [
      //     // 按需加载element-plus
      //     {
      //       libraryName: "element-plus",
      //       esModule: true,
      //       ensureStyleFile: true,
      //       resolveStyle: (name) => {
      //         return `element-plus/lib/theme-chalk/${name}.css`;
      //       },
      //       resolveComponent: (name) => {
      //         return `element-plus/lib/${name}`;
      //       },
      //     },
      //     // 按需加载vxe-table
      //     {
      //       libraryName: "vxe-table",
      //       esModule: true,
      //       resolveComponent: (name) => `vxe-table/es/${name}`,
      //       resolveStyle: (name) => `vxe-table/es/${name}/style.css`,
      //     },
      //   ]
      // }),
      viteMockServe({
        mockPath: "mock",
        watchFiles: true, // 监视文件夹中的文件更改。 并实时同步到请求结果
        supportTs: true,
        localEnabled: command === "serve", // 设置为 false 将禁用 mock 功能
        prodEnabled: command !== "serve" && prodMock, // 设置打包是否启用 mock 功能
        injectCode: `
          import { setupProdMockServer } from './mockProdServer';
          setupProdMockServer();
        `,
        logger: false, // 是否在控制台显示请求日志
      }),

      VitePluginElementPlus({
        // 如果你需要使用 [component name].scss 源文件，你需要把下面的注释取消掉。
        // 对于所有的 API 你可以参考 https://github.com/element-plus/vite-plugin-element-plus 的文档注释
        // useSource: true,
        format: mode === 'development' ? 'esm' : 'cjs'
      }),
    ],
  }
}
